package A002_Obrazek;

import java.awt.image.BufferedImage;
import java.util.TreeMap;

public class _A_OBRAZEK extends _A_DaneObrazka2{
	
	boolean diag = false;

	// dane do obrazu
	public String _NazwaObrazu; // nazwa elemntu szukanego
	public int _PunktDoZnalezienia; // znajdz określony wierzcholek obrazka
	public boolean _Konwertowac; // konwertuj obrazek
	public int tolerancja; // tolerancja szukania
	public boolean kolorFixUzyj;
	public int tolerProcentUzyj;

	//OBRAZEK;
	public BufferedImage _obrazek[]; // oryginalny obrazek .bmp
	public BufferedImage _filtr; // pierwszy obraz bezposrednio po filtrowaniu / przed cropem
	public BufferedImage _filtrCrop; // pierwszy obrazek po kropowaniu
	
	public TreeMap<Integer, Integer> _kolorFix;// dobierz kolor
	
	public int _obrazekOrgSZER;
	public int _obrazekOrgWYS;
	public int _Pierwszypixel; //wartosc pierwszego pixela
	public int _Ostatnipixel; //wartosc otatniego pixela
	public int _startX1; //pierwszy pixel
	public int _startY1;
	public int _startX2;//ostatni pixel
	public int _startY2;
	public int _sumaKontrolanPix; //Suma kontrolna po cropwaniu pixeli pełnych ( nie -1 )

	public int korektaX;//korekta pozycji naciku np kursora
	public int korektaY;
	
	
	
	
	/**
	 * @param name
	 * @param Pathobrazek
	 * @param tolerancja

	 * @param iloscDoZnalezienia
	 * @throws Exception
	 * 1. konwertuje oryginalny obrazek na nieparzyste wartosci
	 * 2. kopiuje obrazek
	 * 3. ustawia srednia filtru i go tworzy
	 * 4. crop
	 * 5. Ustawi pierwszy i ostatni pixel do przyspieszenia findera
	 * 5 .iSumaKontrolnaPix - suma kontrolna pix fo findera
	 * 6 . conversja 2 D to 1 D
	 */


	/**
	 * @param NazwaObrazu - Nazwa obrazu
	 * @param SciezkaDoObrazu - Sciezka do pobrania obrazu
	 * @param Konwerowac - czy szykany obraz ma byc upraszczany
	 * 						jesli tak to TRUE
	 * @param Wierzcholek - 1 Default jesli null - Srodek Obrazu
	 * 						2 Lewy gorny rog obrazu
	 * 						3 Prawy Gorny rog obrazu
	 * 						4 Lewy dolny rog obrazu
	 * 						5 Prawy dolny rog obrazu
	 * @throws Exception
	 */
	
	public _A_OBRAZEK (String NazwaObrazu, BufferedImage ... obrazek ) throws Exception {
		super(NazwaObrazu);
	
		this._NazwaObrazu = NazwaObrazu;
		this._obrazek = obrazek;
		this._obrazekOrgSZER = _obrazek[0].getWidth();
		this._obrazekOrgWYS = _obrazek[0].getHeight();
		
		
		try{
			ENUM_obrazki p = ENUM_obrazki.valueOf(this._NazwaObrazu);
			this._Konwertowac = p.konwerowac();		
			this.tolerancja = p.tolerancja();
			this.tolerProcentUzyj = p.tolerProcent();
			this.kolorFixUzyj=p.kolorFix();
		}catch(IllegalArgumentException e){
			this.tolerancja=10;
			this._Konwertowac = false;		
			this.tolerancja = 0;
			this.tolerProcentUzyj = 0;
			this.kolorFixUzyj=false;
		}
		
		_kolorFix = new TreeMap<Integer, Integer>();
		
		init();
		}
		
		private void init(){
		
		//-->od tąd działamy już na pierwszym obrazku
		
		_filtr = KopiujObraz (_obrazek[0]); //2

		try {
			new _E_UstawSredniaFiltru2 (_filtr, this._obrazek[0], this._Konwertowac);
		} catch (Exception e) {
			e.printStackTrace();
		} //3
		
		_filtrCrop = crop (_filtr, _obrazek[0]);//4
		
		int f[] = _ustalKrance (this._filtrCrop); //ustawia pierwszy i ostatni pixel
		this._startX1 = f[0];
		this._startY1 = f[1];
		this._Pierwszypixel = f[2];
		this._startX2 = f[3];
		this._startY2 =f[4];
		this._Ostatnipixel = f[5];
				
		this._sumaKontrolanPix = _sumaKontrolnaPix(_filtrCrop); // 5
		
		this._kolorFix = _ustawKolorFix( _kolorFix, _obrazek);
					
		if (diag) System.out.println (toString());
		//zapis na dysku filtra dla testow =============>
		//zapiszobraz(_NazwaObrazu, _obrazek[0], _filtr, _filtrCrop);
	}
	
	public String toString(){
		String st = "\nObrazek Szukany " +"\t" + this._NazwaObrazu + 
					"\nWIELKOSC OBRAZKA GLOWNEGO \t" + _obrazek.length +
					"\nWielkosc filtruCrop \tW-" + _filtrCrop.getWidth() +" H-" + _filtrCrop.getHeight() + "\n" + 
					"Pierwszy Punkt \t\tX1/Y1..." + _startX1 + "/" + _startY1 + "-"  + " _PPix..." + _Pierwszypixel +"\n" +
					"Ostatni Punkt \t\tX2/Y2..." + _startX2 + "/" + _startY2 + "-"  + " _OPix..." + _Ostatnipixel  +
					"\nDo nalezienia\t\t" + this._sumaKontrolanPix + "\n\n\n";
		return st;
	}
}
